using System.Collections.Generic;
using OracleInternal.Common;
using OracleInternal.SqlAndPlsqlParser.LocalParsing;

namespace OracleInternal.SqlAndPlsqlParser.RuleProcessors.ODPCommands
{
	internal static class OracleMbEarleySqlQueryOrDmlStmtRuleMultiProcessors
	{
		public static OracleMbEarleyRuleMultiProcessorAddItem[] s_vRuleProcessorItems;

		static OracleMbEarleySqlQueryOrDmlStmtRuleMultiProcessors()
		{
			OracleMbEarleyRuleMultiProcessorAddItem[] array = new OracleMbEarleyRuleMultiProcessorAddItem[28];
			OracleMbEarleyRuleMultiProcessorAddItem oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "sql_query_or_dml_stmt",
				m_vRHSSymbols = new string[1]
				{
					"delete"
				},
				m_vRuleProcessor = Process_SqlQueryOrDmlStmt_Delete_Rule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.SpecificRule
			};
			array[0] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "sql_query_or_dml_stmt",
				m_vRHSSymbols = new string[1]
				{
					"insert"
				},
				m_vRuleProcessor = Process_SqlQueryOrDmlStmt_Insert_Rule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.SpecificRule
			};
			array[1] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "sql_query_or_dml_stmt",
				m_vRHSSymbols = new string[1]
				{
					"merge"
				},
				m_vRuleProcessor = Process_SqlQueryOrDmlStmt_Merge_Rule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.SpecificRule
			};
			array[2] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "sql_query_or_dml_stmt",
				m_vRHSSymbols = new string[1]
				{
					"select"
				},
				m_vRuleProcessor = Process_SqlQueryOrDmlStmt_Select_Rule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.SpecificRule
			};
			array[3] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "sql_query_or_dml_stmt",
				m_vRHSSymbols = new string[1]
				{
					"update"
				},
				m_vRuleProcessor = Process_SqlQueryOrDmlStmt_Update_Rule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.SpecificRule
			};
			array[4] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "delete",
				m_vRHSSymbols = new string[1]
				{
					"aliased_dml_table_expression_clause"
				},
				m_vRuleProcessor = Process_Delete_AliasedTableExpressionClause_PartialRule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.AllPartialMatchingRules
			};
			array[5] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "delete",
				m_vRHSSymbols = new string[1]
				{
					"where_clause"
				},
				m_vRuleProcessor = Process_Delete_WhereClause_PartialRule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.AllPartialMatchingRules
			};
			array[6] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "delete",
				m_vRHSSymbols = new string[1]
				{
					"returning_clause"
				},
				m_vRuleProcessor = Process_Delete_ReturningClause_PartialRule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.AllPartialMatchingRules
			};
			array[7] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "insert",
				m_vRHSSymbols = new string[1]
				{
					"insert"
				},
				m_vRuleProcessor = Process_Insert_Insert_EndsWithRule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.AllRulesEndingWith
			};
			array[8] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "insert",
				m_vRHSSymbols = new string[1]
				{
					"single_table_insert"
				},
				m_vRuleProcessor = Process_Insert_SingleTableInsert_Rule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.SpecificRule
			};
			array[9] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "insert",
				m_vRHSSymbols = new string[1]
				{
					"multi_table_insert"
				},
				m_vRuleProcessor = Process_Insert_MultiTableInsert_Rule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.SpecificRule
			};
			array[10] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "single_table_insert",
				m_vRHSSymbols = new string[2]
				{
					"insert_into_clause",
					"single_table_insert"
				},
				m_vRuleProcessor = Process_SingleTableInsert_InsertIntoClause_SingleTableInsert_Rule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.SpecificRule
			};
			array[11] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "single_table_insert",
				m_vRHSSymbols = new string[3]
				{
					"insert_into_clause",
					"single_table_insert",
					"error_logging_clause"
				},
				m_vRuleProcessor = Process_SingleTableInsert_InsertIntoClause_SingleTableInsert_ErrorLoggingClause_Rule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.SpecificRule
			};
			array[12] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "single_table_insert",
				m_vRHSSymbols = new string[1]
				{
					"subquery"
				},
				m_vRuleProcessor = Process_SingleTableInsert_Subquery_Rule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.SpecificRule
			};
			array[13] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "single_table_insert",
				m_vRHSSymbols = new string[1]
				{
					"values_clause"
				},
				m_vRuleProcessor = Process_SingleTableInsert_ValuesClause_Rule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.SpecificRule
			};
			array[14] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "single_table_insert",
				m_vRHSSymbols = new string[2]
				{
					"values_clause",
					"returning_clause"
				},
				m_vRuleProcessor = Process_SingleTableInsert_ValuesClause_ReturningClause_Rule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.SpecificRule
			};
			array[15] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "multi_table_insert",
				m_vRHSSymbols = new string[2]
				{
					"multi_table_insert",
					"subquery"
				},
				m_vRuleProcessor = Process_MultiTableInsert_MultiTableInsert_Subquery_Rule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.SpecificRule
			};
			array[16] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "multi_table_insert",
				m_vRHSSymbols = new string[1]
				{
					"multi_table_insert"
				},
				m_vRuleProcessor = Process_MultiTableInsert_MultiTableInsert_Rule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.SpecificRule
			};
			array[17] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "multi_table_insert",
				m_vRHSSymbols = new string[2]
				{
					"multi_table_insert",
					"multi_table_insert"
				},
				m_vRuleProcessor = Process_MultiTableInsert_MultiTableInsert_MultiTableInsert_Rule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.SpecificRule
			};
			array[18] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "multi_table_insert",
				m_vRHSSymbols = new string[1]
				{
					"insert_into_clause"
				},
				m_vRuleProcessor = Process_MultiTableInsert_InsertIntoClause_PartialRule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.AllPartialMatchingRules
			};
			array[19] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "multi_table_insert",
				m_vRHSSymbols = new string[1]
				{
					"values_clause"
				},
				m_vRuleProcessor = Process_MultiTableInsert_ValuesClause_PartialRule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.AllPartialMatchingRules
			};
			array[20] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "multi_table_insert",
				m_vRHSSymbols = new string[1]
				{
					"error_logging_clause"
				},
				m_vRuleProcessor = Process_MultiTableInsert_ErrorLoggingClause_PartialRule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.AllPartialMatchingRules
			};
			array[21] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "update",
				m_vRHSSymbols = new string[1]
				{
					"aliased_dml_table_expression_clause"
				},
				m_vRuleProcessor = Process_Update_AliasedTableExpressionClause_PartialRule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.AllPartialMatchingRules
			};
			array[22] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "update",
				m_vRHSSymbols = new string[1]
				{
					"update_set_clause"
				},
				m_vRuleProcessor = Process_Update_UpdateSetClause_PartialRule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.AllPartialMatchingRules
			};
			array[23] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "update",
				m_vRHSSymbols = new string[1]
				{
					"where_clause"
				},
				m_vRuleProcessor = Process_Update_WhereClause_PartialRule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.AllPartialMatchingRules
			};
			array[24] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "update",
				m_vRHSSymbols = new string[1]
				{
					"returning_clause"
				},
				m_vRuleProcessor = Process_Update_ReturningClause_PartialRule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.AllPartialMatchingRules
			};
			array[25] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "update",
				m_vRHSSymbols = new string[1]
				{
					"error_logging_clause"
				},
				m_vRuleProcessor = Process_Update_ErrorLoggingClause_PartialRule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.AllPartialMatchingRules
			};
			array[26] = oracleMbEarleyRuleMultiProcessorAddItem;
			oracleMbEarleyRuleMultiProcessorAddItem = new OracleMbEarleyRuleMultiProcessorAddItem
			{
				m_vHeadSymbol = "update_set_clause",
				m_vRHSSymbols = new string[2]
				{
					"'SET'",
					"update_set_clause"
				},
				m_vRuleProcessor = Process_Update_SET_UpdateSetClause_Rule,
				m_vAddType = OracleMbEarleyRuleMultiProcessorAddType.SpecificRule
			};
			array[27] = oracleMbEarleyRuleMultiProcessorAddItem;
			s_vRuleProcessorItems = array;
		}

		public static object Process_SqlQueryOrDmlStmt_Delete_Rule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			OracleLpParserContext oracleLpParserContext = (OracleLpParserContext)ctx;
			OracleLpStatement result = (oracleLpParserContext.CurrentStatement = new OracleLpDeleteStatement(oracleLpParserContext.CurrentStatementText, (IOracleMetadata)oracleLpParserContext.GetActiveObject(0)));
			OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(ctx.CurrentParseNode, ctx.CurrentRuleIndex + 1, -1, ctx);
			return result;
		}

		public static object Process_SqlQueryOrDmlStmt_Insert_Rule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			OracleLpParserContext oracleLpParserContext = (OracleLpParserContext)ctx;
			OracleLpStatement result = (oracleLpParserContext.CurrentStatement = new OracleLpInsertStatement(oracleLpParserContext.CurrentStatementText, (IOracleMetadata)oracleLpParserContext.GetActiveObject(0)));
			OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(ctx.CurrentParseNode, ctx.CurrentRuleIndex + 1, -1, ctx);
			return result;
		}

		public static object Process_SqlQueryOrDmlStmt_Merge_Rule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			OracleLpParserContext oracleLpParserContext = (OracleLpParserContext)ctx;
			OracleLpStatement result = (oracleLpParserContext.CurrentStatement = new OracleLpMergeStatement(oracleLpParserContext.CurrentStatementText, (IOracleMetadata)oracleLpParserContext.GetActiveObject(0)));
			oracleLpParserContext.CurrentStatementClause = OracleLpStatementClauseType.Subquery;
			oracleLpParserContext.HandleBindVariables = true;
			return result;
		}

		public static object Process_SqlQueryOrDmlStmt_Select_Rule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			OracleLpParserContext oracleLpParserContext = (OracleLpParserContext)ctx;
			OracleLpStatement result = (oracleLpParserContext.CurrentStatement = new OracleLpSelectStatement(oracleLpParserContext.CurrentStatementText, (IOracleMetadata)oracleLpParserContext.GetActiveObject(0)));
			OracleMbEarleyRuleMultiProcessorTable ruleProcessorTable = ctx.RuleProcessorTable;
			ctx.RuleProcessorTable = ctx.GetRuleProcessorTable("select");
			OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(ctx.CurrentParseNode, ctx.CurrentRuleIndex + 1, -1, ctx);
			ctx.RuleProcessorTable = ruleProcessorTable;
			return result;
		}

		public static object Process_SqlQueryOrDmlStmt_Update_Rule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			OracleLpParserContext oracleLpParserContext = (OracleLpParserContext)ctx;
			OracleLpStatement result = (oracleLpParserContext.CurrentStatement = new OracleLpUpdateStatement(oracleLpParserContext.CurrentStatementText, (IOracleMetadata)oracleLpParserContext.GetActiveObject(0)));
			OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(ctx.CurrentParseNode, ctx.CurrentRuleIndex + 1, -1, ctx);
			return result;
		}

		public static object Process_Delete_AliasedTableExpressionClause_PartialRule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			List<ParseNode> list = ctx.CurrentParseNode.Children();
			OracleMbEarleyRuleMultiProcessorTable ruleProcessorTable = ctx.RuleProcessorTable;
			ctx.RuleProcessorTable = ctx.GetRuleProcessorTable("aliased_dml_table_expression_clause");
			object result = OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(list[ruleMatchPosition], 0, -1, ctx);
			ctx.RuleProcessorTable = ruleProcessorTable;
			return result;
		}

		public static object Process_Delete_WhereClause_PartialRule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			List<ParseNode> list = ctx.CurrentParseNode.Children();
			OracleMbEarleyRuleMultiProcessorTable ruleProcessorTable = ctx.RuleProcessorTable;
			ctx.RuleProcessorTable = ctx.GetRuleProcessorTable("where_clause");
			object result = OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(list[ruleMatchPosition], 0, -1, ctx);
			ctx.RuleProcessorTable = ruleProcessorTable;
			return result;
		}

		public static object Process_Delete_ReturningClause_PartialRule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			List<ParseNode> list = ctx.CurrentParseNode.Children();
			((OracleLpParserContext)ctx).CurrentStatement.HasReturningClause = true;
			OracleMbEarleyRuleMultiProcessorTable ruleProcessorTable = ctx.RuleProcessorTable;
			ctx.RuleProcessorTable = ctx.GetRuleProcessorTable("returning_clause");
			object result = OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(list[ruleMatchPosition], 0, -1, ctx);
			ctx.RuleProcessorTable = ruleProcessorTable;
			return result;
		}

		public static object Process_Insert_Insert_EndsWithRule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			return OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(ctx.CurrentParseNode.Children()[ruleMatchPosition], 0, -1, ctx);
		}

		public static object Process_Insert_SingleTableInsert_Rule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			return OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(ctx.CurrentParseNode, ctx.CurrentRuleIndex + 1, -1, ctx);
		}

		public static object Process_Insert_MultiTableInsert_Rule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			return OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(ctx.CurrentParseNode, ctx.CurrentRuleIndex + 1, -1, ctx);
		}

		public static object Process_SingleTableInsert_InsertIntoClause_SingleTableInsert_Rule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			_ = (OracleLpParserContext)ctx;
			List<ParseNode> list = ctx.CurrentParseNode.Children();
			OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(list[1], 0, -1, ctx);
			OracleMbEarleyRuleMultiProcessorTable ruleProcessorTable = ctx.RuleProcessorTable;
			ctx.RuleProcessorTable = ctx.GetRuleProcessorTable("aliased_dml_table_expression_clause");
			object result = OracleMbEarleyRuleMultiProcessor.TraverseAndProcessNodeSubtreeRules(list[0], ctx, ctx.RuleProcessorTable.RuleProcessors);
			ctx.RuleProcessorTable = ruleProcessorTable;
			return result;
		}

		public static object Process_SingleTableInsert_InsertIntoClause_SingleTableInsert_ErrorLoggingClause_Rule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			_ = (OracleLpParserContext)ctx;
			List<ParseNode> list = ctx.CurrentParseNode.Children();
			OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(list[1], 0, -1, ctx);
			OracleMbEarleyRuleMultiProcessorTable ruleProcessorTable = ctx.RuleProcessorTable;
			ctx.RuleProcessorTable = ctx.GetRuleProcessorTable("aliased_dml_table_expression_clause");
			OracleMbEarleyRuleMultiProcessor.TraverseAndProcessNodeSubtreeRules(list[0], ctx, ctx.RuleProcessorTable.RuleProcessors);
			ctx.RuleProcessorTable = ctx.GetRuleProcessorTable("error_logging_clause");
			object result = OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(list[2], 0, -1, ctx);
			ctx.RuleProcessorTable = ruleProcessorTable;
			return result;
		}

		public static object Process_SingleTableInsert_Subquery_Rule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			OracleLpParserContext obj = (OracleLpParserContext)ctx;
			_ = obj.CurrentStatement;
			obj.CurrentStatementClause = OracleLpStatementClauseType.Subquery;
			obj.HandleBindVariables = true;
			return null;
		}

		public static object Process_SingleTableInsert_ValuesClause_Rule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			ctx.CurrentParseNode.Children();
			OracleMbEarleyRuleMultiProcessorTable ruleProcessorTable = ctx.RuleProcessorTable;
			ctx.RuleProcessorTable = ctx.GetRuleProcessorTable("values_clause");
			object result = OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(ctx.CurrentParseNode, ctx.CurrentRuleIndex + 1, -1, ctx);
			ctx.RuleProcessorTable = ruleProcessorTable;
			return result;
		}

		public static object Process_SingleTableInsert_ValuesClause_ReturningClause_Rule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			List<ParseNode> list = ctx.CurrentParseNode.Children();
			OracleMbEarleyRuleMultiProcessorTable ruleProcessorTable = ctx.RuleProcessorTable;
			ctx.RuleProcessorTable = ctx.GetRuleProcessorTable("values_clause");
			OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(list[0], 0, -1, ctx);
			ctx.RuleProcessorTable = ctx.GetRuleProcessorTable("returning_clause");
			object result = OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(list[1], 0, -1, ctx);
			ctx.RuleProcessorTable = ruleProcessorTable;
			return result;
		}

		public static object Process_MultiTableInsert_MultiTableInsert_Subquery_Rule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			object obj = null;
			List<ParseNode> list = ctx.CurrentParseNode.Children();
			OracleLpParserContext oracleLpParserContext = (OracleLpParserContext)ctx;
			_ = oracleLpParserContext.CurrentStatement;
			obj = OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(list[0], 0, -1, ctx);
			oracleLpParserContext.CurrentStatementClause = OracleLpStatementClauseType.Subquery;
			oracleLpParserContext.HandleBindVariables = true;
			OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(list[1], 0, -1, ctx);
			return obj;
		}

		public static object Process_MultiTableInsert_MultiTableInsert_Rule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			return OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(ctx.CurrentParseNode, ctx.CurrentRuleIndex + 1, -1, ctx);
		}

		public static object Process_MultiTableInsert_MultiTableInsert_MultiTableInsert_Rule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			_ = (OracleLpParserContext)ctx;
			List<ParseNode> list = ctx.CurrentParseNode.Children();
			OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(list[0], 0, -1, ctx);
			return OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(list[1], 0, -1, ctx);
		}

		public static object Process_MultiTableInsert_InsertIntoClause_PartialRule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			object obj = null;
			OracleMbEarleyRuleMultiProcessorTable ruleProcessorTable = ctx.RuleProcessorTable;
			ctx.RuleProcessorTable = ctx.GetRuleProcessorTable("aliased_dml_table_expression_clause");
			obj = ((!ctx.CurrentRule.IsUnary) ? OracleMbEarleyRuleMultiProcessor.TraverseAndProcessNodeSubtreeRules(ctx.CurrentParseNode.Children()[ruleMatchPosition], ctx, ctx.RuleProcessorTable.RuleProcessors) : OracleMbEarleyRuleMultiProcessor.TraverseAndProcessNodeSubtreeRules(ctx.CurrentParseNode, ctx, ctx.RuleProcessorTable.RuleProcessors));
			ctx.RuleProcessorTable = ruleProcessorTable;
			return obj;
		}

		public static object Process_MultiTableInsert_ValuesClause_PartialRule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			List<ParseNode> list = ctx.CurrentParseNode.Children();
			OracleMbEarleyRuleMultiProcessorTable ruleProcessorTable = ctx.RuleProcessorTable;
			ctx.RuleProcessorTable = ctx.GetRuleProcessorTable("values_clause");
			object result = OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(list[ruleMatchPosition], 0, -1, ctx);
			ctx.RuleProcessorTable = ruleProcessorTable;
			return result;
		}

		public static object Process_MultiTableInsert_ErrorLoggingClause_PartialRule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			List<ParseNode> list = ctx.CurrentParseNode.Children();
			OracleMbEarleyRuleMultiProcessorTable ruleProcessorTable = ctx.RuleProcessorTable;
			ctx.RuleProcessorTable = ctx.GetRuleProcessorTable("error_logging_clause");
			object result = OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(list[ruleMatchPosition], 0, -1, ctx);
			ctx.RuleProcessorTable = ruleProcessorTable;
			return result;
		}

		public static object Process_Update_AliasedTableExpressionClause_PartialRule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			List<ParseNode> list = ctx.CurrentParseNode.Children();
			OracleMbEarleyRuleMultiProcessorTable ruleProcessorTable = ctx.RuleProcessorTable;
			ctx.RuleProcessorTable = ctx.GetRuleProcessorTable("aliased_dml_table_expression_clause");
			object result = OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(list[ruleMatchPosition], 0, -1, ctx);
			ctx.RuleProcessorTable = ruleProcessorTable;
			return result;
		}

		public static object Process_Update_WhereClause_PartialRule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			List<ParseNode> list = ctx.CurrentParseNode.Children();
			OracleMbEarleyRuleMultiProcessorTable ruleProcessorTable = ctx.RuleProcessorTable;
			ctx.RuleProcessorTable = ctx.GetRuleProcessorTable("where_clause");
			object result = OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(list[ruleMatchPosition], 0, -1, ctx);
			ctx.RuleProcessorTable = ruleProcessorTable;
			return result;
		}

		public static object Process_Update_UpdateSetClause_PartialRule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			return OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(ctx.CurrentParseNode.Children()[ruleMatchPosition], 0, -1, ctx);
		}

		public static object Process_Update_ReturningClause_PartialRule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			List<ParseNode> list = ctx.CurrentParseNode.Children();
			OracleMbEarleyRuleMultiProcessorTable ruleProcessorTable = ctx.RuleProcessorTable;
			ctx.RuleProcessorTable = ctx.GetRuleProcessorTable("returning_clause");
			object result = OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(list[ruleMatchPosition], 0, -1, ctx);
			ctx.RuleProcessorTable = ruleProcessorTable;
			return result;
		}

		public static object Process_Update_ErrorLoggingClause_PartialRule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			List<ParseNode> list = ctx.CurrentParseNode.Children();
			OracleMbEarleyRuleMultiProcessorTable ruleProcessorTable = ctx.RuleProcessorTable;
			ctx.RuleProcessorTable = ctx.GetRuleProcessorTable("error_logging_clause");
			object result = OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(list[ruleMatchPosition], 0, -1, ctx);
			ctx.RuleProcessorTable = ruleProcessorTable;
			return result;
		}

		public static object Process_Update_SET_UpdateSetClause_Rule(OracleMbEarleyParserMultiContext ctx, int ruleMatchPosition)
		{
			List<ParseNode> list = ctx.CurrentParseNode.Children();
			OracleLpParserContext obj = (OracleLpParserContext)ctx;
			_ = obj.CurrentStatement;
			obj.CurrentStatementClause = OracleLpStatementClauseType.UpdateSetClause;
			obj.HandleBindVariables = true;
			return OracleMbEarleyRuleMultiProcessor.ProcessNodeRules(list[1], 0, -1, ctx);
		}
	}
}
